#include "head.h"

// 菜单信息 - 登陆用
const wchar_t *title = L"普通用户菜单";
const wchar_t *option_1[] = {L"登录", L"注册", L"返回"};

// 菜单信息 - 管理员用
const wchar_t *title_root = L"用户菜单";
const wchar_t *option_root[] = {
    L"设定航班",
    L"修改航班",
    L"修改普通用户",
    L"增加超级用户",
    L"返回界面"};

// 菜单信息 - 普通用户用
const wchar_t *title_user = L"用户菜单";
const wchar_t *option_user[] = {
    L"购票",
    L"退票",
    L"余额充值",
    L"查看航班",
    L"修改密码",
    L"我的订单",
    L"返回界面"};

// 系统初始化
FlightSystem Sys_init(void)
{
    FlightSystem Flight_sys;
    Flight_sys.Flight_list = D_List_init();   // 航班信息
    Flight_sys.ADMIN_USER = S_List_init();    // 管理员账户信息
    Flight_sys.REGULAR_USER = S_List_init();  // 普通用户信息
    Flight_sys.SILVER_USER = S_List_init();   // 银卡会员信息 (9折)
    Flight_sys.GOLD_USER = S_List_init();     // 金卡会员信息 (8折)
    Flight_sys.PLATINUM_USER = S_List_init(); // 白金会员信息 (7折)

    // 从文件中导入数据
    D_List_file_scanf(Flight_sys.Flight_list);                  // 航班信息
    S_List_File_scanf(Flight_sys.ADMIN_USER, ADMIN_FILE);       // 管理员账户信息文件
    S_List_File_scanf(Flight_sys.REGULAR_USER, REGULAR_FILE);   // 普通用户信息文件
    S_List_File_scanf(Flight_sys.SILVER_USER, SILVER_FILE);     // 银卡会员信息文件 (9折)
    S_List_File_scanf(Flight_sys.GOLD_USER, GOLD_FILE);         // 金卡会员信息文件 (8折)
    S_List_File_scanf(Flight_sys.PLATINUM_USER, PLATINUM_FILE); // 白金会员信息文件 (7折)

    system("clear");
    return Flight_sys;
}

// 系统登录
U_data Sys_log_in(FlightSystem Flight_sys)
{
    // 用户信息合表
    U_list *list = S_List_init();
    list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)

    // 开始登录
    U_data log_data = Log_in(list);
    return log_data;
}

// 系统菜单
void Sys_menu(F_list *Flight_list, U_data log_data)
{

    // 分支
    int flag = 0;
    switch (log_data.grade)
    {
    case 1:
        // 管理员功能界面
        printf("欢迎管理员用户登陆\n");
        flag = display_menu(title_root, option_root, 5);

        break;
    default:
        // 普通用户功能界面
        printf("欢迎普通用户登陆\n");
        flag = display_menu(title_user, option_user, 7) + 5;
        break;
    }

    // 菜单选项分支处理
    switch (flag)
    {
    case 1:
        // 管理员 - 设定航班
        add_flight_information();

        break;
    case 2:
        // 管理员 - 修改航班
        change_flight_information();
        break;
    case 3:
        // 管理员 - 修改普通用户
        change_user_information();
        break;
    case 4:
        // 管理员 - 增加超级用户
        change_user_information();
        break;
    case (5):
        // 返回
        text();
        // display_menu(title_root, option_root, 5);
        // Sys_menu(Flight_list,log_data);
        break;
    case 6:
        buy_refund_ticket(log_data);
        // 用户 - 购票
        break;
    case 7:
        refund_ticket(log_data);
        // 用户-退票
        break;

    case 8:
        user_pay(log_data);
        // 用户 - 余额充值
        break;
    case 9:
        look_user(log_data);
        // 用户 - 查看航班

        break;
    case 10:
        change_password(log_data);
        // 用户 - 修改密码
        break;
    case 11:
        check_information(log_data);
        // 用户 - 我的订单
        break;
    case 12:
        text();
        // 返回界面
    default:
        break;
    }
}
//==============================================注册=====================================================
void register_user()
{
    system("clear");
    U_list *p = S_List_init();
    S_List_File_scanf(p, REGULAR_FILE);
    printf("请输入你的注册信息:\n");
    U_data data;
    printf("用户名:\n");
    scanf("%s", data.name);
    printf("密码:\n");
    scanf("%s", data.passwd);
    data.grade = 2;
    printf("身份码:%d\n", data.grade);
    data.value = 0;
    printf("余额:%d\n", data.value);
    data.ticket_num = 0;
    printf("票数:0\n");
    // scanf("%d",&data.value);

    S_List_insert(p, data, 1);
    S_List_File_print(p, REGULAR_FILE);
    system("clear");
    return text();
    // return;
}
void text()
{
    // system("clear");
    const wchar_t *title = L"普通用户菜单";
    const wchar_t *option_1[] = {L"登录", L"注册", L"返回"};
    int flag = 0;
    FlightSystem d;
    U_data f;
    flag = display_menu(title, option_1, 3);
    switch (flag)
    {
    case 1:
        d = Sys_init();
        f = Sys_log_in(d);
        Sys_menu(d.Flight_list, f);

        break;
    case 2:
        register_user();
        break;

    case 3:
        exit(-1);
        break;
    default:
        break;
    }
    return;
}
//==========================================返回管理员界面===================================
void admain()
{
    int flag;
    flag = display_menu(title_root, option_root, 5);
    switch (flag)
    {
    case 1:
        // 管理员 - 设定航班
        add_flight_information();

        break;
    case 2:
        // 管理员 - 修改航班
        change_flight_information();
        break;
    case 3:
        // 管理员 - 修改普通用户
        change_user_information();
        break;
    case 4:
        // 管理员 - 增加超级用户
        change_user_information();
        break;
    case (5):
        // 返回
        text();
        // display_menu(title_root, option_root, 5);
        // Sys_menu(Flight_list,log_data);
        break;

    default:
        break;
    }
}
//===========================================返回登录用户界面=====================================
void user(F_list *Flight_list, U_data log_data)
{
    int flag;
    flag = display_menu(title_user, option_user, 7) + 5;

    switch (flag)
    {
    case 1:
        // 管理员 - 设定航班
        add_flight_information();

        break;
    case 2:
        // 管理员 - 修改航班
        change_flight_information();
        break;
    case 3:
        // 管理员 - 修改普通用户
        change_user_information();
        break;
    case 4:
        // 管理员 - 增加超级用户
        change_user_information();
        break;
    case (5):
        // 返回
        text();
        // display_menu(title_root, option_root, 5);
        // Sys_menu(Flight_list,log_data);
        break;
    case 6:
        buy_refund_ticket(log_data);
        // 用户 - 购票
        break;
    case 7:
        refund_ticket(log_data);
        // 用户-退票
        break;

    case 8:
        user_pay(log_data);
        // 用户 - 余额充值
        break;
    case 9:
        look_user(log_data);
        // 用户 - 查看航班

        break;
    case 10:
        change_password(log_data);
        // 用户 - 修改密码
        break;
    case 11:
        check_information(log_data);
        // 用户 - 我的订单
        break;
    case 12:
        text();
        // 返回界面
    default:
        break;
    }
}